PyTorch 용어 사전

PyTorch & GPU 실습 용어 사전

1. 하드웨어 관련

GPU (Graphics Processing Unit)

그래픽 처리 장치로, 원래는 그래픽 렌더링을 위해 설계되었지만 병렬 처리에 특화되어 딥러닝 연산에 널리 사용됩니다.

특징

CPU vs GPU 비교

구분 CPU GPU
코어 수 4-32개 수천 개
처리 방식 순차 처리 병렬 처리
메모리 큰 캐시 높은 대역폭
용도 범용 연산 특화 연산

CUDA (Compute Unified Device Architecture)

NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼으로, GPU를 범용 연산에 사용할 수 있게 해주는 기술입니다.

주요 구성요소

버전 호환성

nvidia-smi

NVIDIA System Management Interface의 줄임말로, NVIDIA GPU 상태를 모니터링하는 명령줄 도구입니다.

주요 정보

사용 예시

nvidia-smi                    # 현재 상태 확인
watch -n 1 nvidia-smi        # 1초마다 갱신
nvidia-smi -l 1              # 1초마다 연속 출력

2. 소프트웨어 환경

Ubuntu Server

Linux 배포판 중 하나로, 서버 환경에 최적화된 운영체제입니다.

특징

주요 명령어

sudo apt update              # 패키지 목록 업데이트
sudo apt install <package>   # 패키지 설치
sudo apt upgrade             # 패키지 업그레이드

SSH (Secure Shell)

네트워크 상의 다른 컴퓨터에 안전하게 접속하기 위한 프로토콜입니다.

보안 특징

접속 방법

ssh -i <key-file> <username>@<server-ip>

가상환경 (Virtual Environment)

프로젝트별로 독립된 Python 환경을 만들어 패키지 충돌을 방지하는 도구입니다.

필요성

venv 사용법

python3 -m venv venv         # 가상환경 생성
source venv/bin/activate     # 활성화 (Linux/Mac)
deactivate                   # 비활성화

pip (Pip Installs Packages)

Python 패키지 관리자로, PyPI(Python Package Index)에서 패키지를 설치/관리합니다.

주요 명령어

pip install <package>        # 패키지 설치
pip list                     # 설치된 패키지 목록
pip freeze                   # 의존성 목록 생성
pip install -r requirements.txt  # 의존성 일괄 설치

3. PyTorch 라이브러리

PyTorch

Facebook(Meta)에서 개발한 오픈소스 딥러닝 프레임워크입니다.

주요 특징

핵심 구성요소

텐서 (Tensor)

다차원 배열을 표현하는 PyTorch의 기본 데이터 구조입니다.

차원별 명칭

GPU 텐서

tensor_cpu = torch.tensor([1, 2, 3])         # CPU 텐서
tensor_gpu = tensor_cpu.to('cuda')           # GPU로 이동
tensor_gpu = torch.tensor([1, 2, 3]).cuda()  # 직접 GPU 생성

torch.nn.Module

PyTorch에서 모든 신경망의 기본 클래스입니다.

주요 메서드

사용 예시

class MyModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.layer = nn.Linear(10, 1)
    
    def forward(self, x):
        return self.layer(x)

torchvision

컴퓨터 비전을 위한 PyTorch 확장 라이브러리입니다.

주요 구성요소

torchaudio

오디오 처리를 위한 PyTorch 확장 라이브러리입니다.

주요 기능


4. 딥러닝 개념

신경망 (Neural Network)

인간의 뇌 구조를 모방한 기계학습 모델입니다.

구성요소

레이어 (Layer)

신경망을 구성하는 계층 구조입니다.

Linear (Fully Connected) Layer

모든 입력이 모든 출력과 연결된 레이어입니다.

nn.Linear(in_features, out_features)
# 입력 크기: (batch_size, in_features)
# 출력 크기: (batch_size, out_features)

활성화 함수 (Activation Function)

뉴런의 출력을 비선형으로 변환하는 함수입니다.

ReLU (Rectified Linear Unit)

torch.relu(x)  # max(0, x)

손실 함수 (Loss Function)

모델의 예측과 실제 정답 간의 차이를 측정하는 함수입니다.

CrossEntropyLoss

다중 클래스 분류 문제에 사용되는 손실 함수입니다.

loss_fn = nn.CrossEntropyLoss()
loss = loss_fn(predictions, targets)

음의 로그 우도 (Negative Log-Likelihood) 설명

정확히는 "음의 로그 확률"이라고 하는 것이 더 맞습니다. 하지만 딥러닝에서는 관습적으로 "음의 로그 우도"라고 부릅니다.

예시로 설명하면:

용어 정리

왜 음의 로그를 사용하나?

  1. 확률이 높을수록 손실이 작아짐: 정답 확률 0.9 → 손실 0.1, 정답 확률 0.1 → 손실 2.3
  2. 수학적 안정성: 0에 가까운 확률값도 안전하게 처리
  3. 기울기 계산 용이: 로그 함수의 미분이 최적화에 유리

최적화 (Optimization)

모델의 파라미터를 학습 데이터에 맞게 조정하는 과정입니다.

Adam Optimizer

적응적 모멘트 추정을 사용하는 최적화 알고리즘입니다.

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

모멘텀(Momentum)과 RMSprop 상세 설명

1. 모멘텀 (Momentum)

# 의사 코드
velocity = 0.9 * velocity + gradient
parameter = parameter - learning_rate * velocity

장점:

단점:

2. RMSprop (Root Mean Square propagation)

# 의사 코드
squared_gradient = 0.9 * squared_gradient + 0.1 * gradient²
parameter = parameter - learning_rate * gradient / sqrt(squared_gradient + ε)

장점:

단점:

3. Adam = 모멘텀 + RMSprop

# Adam의 핵심 아이디어
# 1. 모멘텀 (1차 모멘트)
m = β1 * m + (1-β1) * gradient
# 2. RMSprop (2차 모멘트)
v = β2 * v + (1-β2) * gradient²
# 3. 편향 보정
m_corrected = m / (1 - β1^t)
v_corrected = v / (1 - β2^t)
# 4. 파라미터 업데이트
parameter = parameter - learning_rate * m_corrected / (sqrt(v_corrected) + ε)

Adam의 장점 (모멘텀 + RMSprop)

실제 동작 비교 예시

상황: 손실 함수가 좁고 긴 골짜기 형태

SGD: 지그재그로 느리게 이동
Momentum: 빠르게 이동하지만 목표점을 지나칠 수 있음
RMSprop: 안정적이지만 방향성 부족으로 비효율적
Adam: 빠르면서도 안정적으로 최적점에 도달

순전파와 역전파

딥러닝 학습의 핵심 과정입니다.

순전파 (Forward Propagation)

역전파 (Backpropagation)

학습 과정

optimizer.zero_grad()     # 기울기 초기화
loss = loss_fn(output, target)  # 손실 계산
loss.backward()           # 역전파
optimizer.step()          # 파라미터 업데이트

5. 데이터셋 관련

MNIST

손글씨 숫자 인식을 위한 대표적인 딥러닝 데이터셋입니다.

구성

특징

DataLoader

데이터를 배치 단위로 모델에 공급하는 PyTorch 유틸리티입니다.

주요 파라미터

dataloader = DataLoader(dataset, batch_size=64, shuffle=True)

배치 (Batch)

한 번에 처리하는 데이터 묶음입니다.

배치 처리의 장점

배치 크기 고려사항

데이터 변환 (Transform)

원본 데이터를 모델 입력에 맞게 변환하는 과정입니다.

ToTensor()

PIL 이미지나 numpy 배열을 PyTorch 텐서로 변환합니다.

transform = transforms.ToTensor()

6. 웹 개발 관련

FastAPI

Python으로 REST API를 빠르게 구축할 수 있는 현대적인 웹 프레임워크입니다.

주요 특징

REST API

Representational State Transfer의 줄임말로, 웹 서비스 아키텍처 스타일입니다.

HTTP 메서드

JSON (JavaScript Object Notation)

데이터 교환을 위한 텍스트 기반 형식입니다.

특징

uvicorn

Python ASGI 서버로, FastAPI 애플리케이션을 실행하는 데 사용됩니다.

ASGI (Asynchronous Server Gateway Interface)

실행 옵션

uvicorn app:app --host 0.0.0.0 --port 8000

용어 간 관계도

GPU 하드웨어
├── CUDA 플랫폼
│   └── PyTorch 프레임워크
│       ├── 텐서 (기본 데이터 구조)
│       ├── nn.Module (신경망 클래스)
│       └── 최적화 알고리즘
│
데이터셋 (MNIST)
├── DataLoader (배치 처리)
└── Transform (전처리)
    └── 신경망 학습
        ├── 순전파
        ├── 손실 계산
        ├── 역전파
        └── 파라미터 업데이트
            └── 모델 저장/로드
                └── FastAPI 서빙

추가 학습 자료

공식 문서

온라인 강의

실습 프로젝트 아이디어